home *** CD-ROM | disk | FTP | other *** search
- /* File : memtrans.c
- Author : Richard A. O'Keefe.
- Updated: 2 June 1984
- Defines: memtrans()
-
- memtrans(dst, src, from, to, len)
- copies exactly len characters from src[] to dst[], translating chars
- in from[] to corresponding characters in to[]. From[] and to[] are
- handled by _str2map. BEWARE: _str2map normally expects characters in
- the range 0..127. The Vax MOVTC instruction thinks its table is 256
- bytes long; if you want to translate arbitrary bytes you'd better be
- sure that the _map_vec array is 256 bytes long. As distributed, the
- memtrans function is only for translating ASCII (to 8-bit codes).
-
- The VaxAsm code can only handle 0 <= len < 2^16, and is presented as
- usual for your interest and amusement. Why *do* designers of 32-bit
- machines put 16-bit limits on strings? (Dec aren't the only ones.)
- */
-
- #include "strings.h"
- #include "_str2map.h"
-
- #if VaxAsm
-
- void memtrans(dst, src, from, to, len)
- _char_ *dst, *src, *from, *to;
- int len;
- {
- _str2map(0, from, to);
- asm("movtc 20(ap),*8(ap),$0,__map_vec,20(ap),*4(ap)");
- }
-
- #else ~VaxAsm
-
- void memtrans(dst, src, from, to, len)
- register _char_ *dst, *src;
- _char_ *from, *to;
- register int len;
- {
- _str2map(0, from, to);
- while (--len >= 0) *dst++ = _map_vec[*src++];
- }
-
- #endif VaxAsm
-